package controller

import (
	"context"
	"github.com/gin-gonic/gin"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"net/http"
	"path/filepath"
	"xunjian/Models"
)

type HomeController struct {
	Models.ClientModel
}

// 前端上传config文件，返回校验成功或者失败
func (home HomeController) Home(c *gin.Context) {
	c.HTML(http.StatusOK, "home.html", gin.H{})
}

// 接收前端上传的config文件，重命名为kube.config保存到conf中
func (home HomeController) DoSave(c *gin.Context) {
	//获取上传的文件
	file, err := c.FormFile("kubeconfig")
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"success": false,
			"message": "获取文件失败：" + err.Error(),
		})
		return
	}
	//2、验证文件类型
	ext := filepath.Ext(file.Filename)
	if ext != ".yaml" && ext != ".yml" && ext != ".config" {
		c.JSON(http.StatusBadRequest, gin.H{
			"success": false,
			"message": "只支持.yaml,.yml或,config文件",
		})
		return
	}
	//3、保存为kube.config
	dst := filepath.Join("conf", "kube.config")
	if err := c.SaveUploadedFile(file, dst); err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"success": false,
			"message": "保存文件失败：" + err.Error(),
		})
	}
	// 4、获取 Kubernetes 客户端
	clientset, err := home.ClientModel.ClientSet() // 正确调用方式
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"success": false,
			"message": "创建 Kubernetes 客户端失败：" + err.Error(),
		})
		return
	}
	//5、判断上传的文件是否能链接集群
	_, err = clientset.CoreV1().Pods("kube-system").List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"success": false,
			"message": "连接集群失败:" + err.Error(),
		})
		return
	}
	//5、文件上传成功
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"message": "文件上传并验证成功",
		"path":    dst,
	})
}
